import pickle
import cv2 as cv
from skimage import io
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import matplotlib.pyplot as plt

##pickle的clf模型
clf = open("clf1", "rb")
clf = pickle.load(clf)
#pickle 的acc准确率
acc= open('acc','rb')
acc = pickle.load(acc)
labels = ['gutianle', 'liangchangwei', 'liudehua', 'zhazhahui', 'zhouhuimin']
img = cv.imread("E:/quanji/liu_0.jpg")
face_cascade = cv.CascadeClassifier()
# 2. 引入训练好的可用于人脸识别的级联分类器模型
face_cascade.load("E:/haarcascade_frontalface_alt.xml")
# 3. 用此级联分类器识别图像中的所有人脸信息，返回一个包含有所有识别的人联系系的列表
# 列表中每一个元素包含四个值：面部左上角的坐标(x,y) 以及面部的宽和高(w,h)
faces = face_cascade.detectMultiScale(img)
for (x, y, w, h) in faces:
    cv.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
    img_faces = img[y:y+h, x:x+w]
    io.imsave("E:/img_faces.jpg",cv.cvtColor(img_faces, cv.COLOR_BGR2RGB))  # 输出生成图像
    img_faces = cv.imread("E:/img_faces.jpg", 0)
    img_faces = cv.resize(img_faces, (32, 32))
    img_faces = img_faces.ravel()
    pred = clf.predict([img_faces])
    print(pred)
    cv.putText(img,  # 要显示字体的图片str(),
               labels[pred[0]],  # 要显示的内容
               (x, y-10),  # 要显示的位置
               cv.FONT_HERSHEY_SIMPLEX,  # 要使用的字体 -> 一般英文字体
               1,  # 字体放大倍数
               (0, 255, 0),  # 字体颜色
               2)  # 字体线条粗细
plt.subplots(figsize=(10, 7))
plt.title("acc = {}".format(acc), size=10, color='r')
plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
plt.show()
